home *** CD-ROM | disk | FTP | other *** search
- /*
- * gemevnts.c
- *
- * Purpose:
- * --------
- * Traitement de divers vnements GEM
- *
- * History:
- * --------
- * fplanque: Created
- */
-
-
- #include "!OPTIONS.H" /* Options de compilation */
- #define THIS_FILE "GEMEVNTS.C v1.00 - 03.95"
-
-
- /*
- * System headers:
- */
- #include <aes.h> /* header AES */
- #include <stdio.h>
-
- /*
- * Custom headers:
- */
- #include "SPEC_PU.H" /* Macros */
- #include "WIN_PU.H"
- #include "WINDR_PU.H"
- #include "DEBUG_PU.H"
- #include "TEXT_PU.H"
-
- /*
- * ------------------------ PROTOTYPES -------------------------
- */
-
- /*
- * EXTernal prototypes:
- */
- /*
- * Objets:
- */
- extern void rearrange_dir( WIPARAMS *wi_params_adr, int new_w );
-
- /*
- * ------------------------ VARIABLES -------------------------
- */
-
- /*
- * External variables:
- */
- /*
- * Gnral:
- */
- extern int G_x_mini, G_y_mini; /* Coord sup gauche de l'cran */
- extern int G_w_maxi, G_h_maxi; /* Taille de l'cran de travail */
- extern int G_ev_mgpbuff[8]; /* Buffer d'venements GEM */
- /*
- * Icnes:
- */
- extern int G_icon_w, G_icon_h; /* Dimensions des icnes */
-
-
-
- /*
- * Private variables:
- */
- /*
- * Buffers:
- */
- static int MB_new_x, MB_new_y, MB_new_w, MB_new_h;
- static long MB_old_pos, MB_new_pos;
-
-
- /*
- * ------------------------ FUNCTIONS -------------------------
- */
-
- /*
- * msg_fulled(-)
- *
- * Purpose:
- * --------
- * WM_FULLED : Full_screen ou rduction de fenêtre
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void msg_fulled(
- WIPARAMS *wi_params_adr )
- {
- /*
- * Variables:
- */
- int wi_handle = wi_params_adr -> handle;
-
- /*
- * Teste si c'est un agrandissement ou une rduction:
- */
- if (wi_params_adr -> fulled == 0) /* si taille norm */
- {
- wind_get( wi_handle, WF_FULLXYWH, &MB_new_x, &MB_new_y, &MB_new_w, &MB_new_h);
- wi_params_adr -> fulled = 1; /* Taille max */
- }
- else
- {
- wind_get( wi_handle, WF_PREVXYWH, &MB_new_x, &MB_new_y, &MB_new_w, &MB_new_h);
- wi_params_adr -> fulled = 0; /* Taille norm */
- }
-
- switch( wi_params_adr -> type )
- {
- case TYP_DIR:
- /*
- * Contrle s'il faut r-arranger les icnes:
- */
- if ( MB_new_w >= (wi_params_adr -> more + G_icon_w)
- || MB_new_w < (wi_params_adr -> more ) )
- {
- /*
- * Rarrange icnes:
- */
- rearrange_dir( wi_params_adr, MB_new_w );
-
- /*
- * Demande redraw total de la fentre:
- */
- send_fullredraw( wi_params_adr );
- };
-
- /*
- * Change les coordonnes de l'arbe d'objets
l'cran:
- */
- (wi_params_adr -> draw_ptr.tree) -> ob_x +=
- MB_new_x - wi_params_adr -> curr_x;
- (wi_params_adr -> draw_ptr.tree) -> ob_y +=
- MB_new_y - wi_params_adr -> curr_y;
- break;
- }
-
- wind_set( wi_handle, WF_CURRXYWH, MB_new_x, MB_new_y, MB_new_w, MB_new_h);
- wi_params_adr -> curr_x = MB_new_x;
- wi_params_adr -> curr_y = MB_new_y;
- wi_params_adr -> curr_w = MB_new_w;
- wi_params_adr -> curr_h = MB_new_h;
-
- /*
- * Taille asc et repositionnement contenu si ncessaire:
- */
- wi_resize( wi_params_adr );
-
- /*
- * On s'occupe de positionner le formulaire pour le prochain redraw:
- */
- if ( wi_params_adr -> type == TYP_ARBO )
- { /*
- * Si positionnement ncessaire:
- */
- fixform_window( wi_params_adr ); /* Fixe nlle position formulaire */
- }
-
- }
-
-
-
- /*
- * msg_arrowed(-)
- *
- * Purpose:
- * --------
- * WM_ARROWED : Flches de dplacement
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * 26.09.94: support type TYP_ERRORS
- */
- void msg_arrowed( WIPARAMS *wi_params_adr )
- {
- /* printf("Seen_h=%d\n", wi_params_adr -> seen_h ); */
-
- /* Selon le type d'ARROW: */
- switch ( G_ev_mgpbuff[4] )
- {
- /* Dplacement vertical */
- case 0:
- case 1:
- case 2:
- case 3:
- switch ( G_ev_mgpbuff[4] )
- {
- case 0: /* Page vers le haut */
- MB_new_pos = l_max ( 0, wi_params_adr -> seen_y
- - wi_params_adr -> seen_h );
- break;
-
- case 1: /* Page vers le bas */
- MB_new_pos = l_min ( wi_params_adr -> total_h - wi_params_adr -> seen_h,
- wi_params_adr -> seen_y + wi_params_adr -> seen_h );
- MB_new_pos = MAX( MB_new_pos, 0 );
- break;
-
- case 2: /* Ligne vers le haut */
- MB_new_pos = l_max ( 0, wi_params_adr -> seen_y - wi_params_adr -> v_step );
- break;
-
- case 3: /* Ligne vers le bas */
- MB_new_pos = l_min ( wi_params_adr -> total_h - wi_params_adr -> seen_h,
- wi_params_adr -> seen_y + wi_params_adr -> v_step );
- MB_new_pos = MAX( MB_new_pos, 0 );
- break;
- }
-
- if ( MB_new_pos != wi_params_adr -> seen_y )
- { /*
- * Si la position verticale a chang:
- */
- switch( wi_params_adr -> type )
- {
- case TYP_TEXT:
- case TYP_DEBUG:
- case TYP_ERRORS:
- /*
- * Fixe nouvelle ligne se trouvant en haut de l'cran:
- */
- vmove_text( wi_params_adr, MB_new_pos );
- break;
-
- case TYP_DIR:
- case TYP_ARBO:
- /*
- * Change les coordonnes de l'arbe d'objets
l'cran:
- */
- (wi_params_adr -> draw_ptr.tree) -> ob_y +=
- (int) (wi_params_adr -> seen_y - MB_new_pos);
- break;
-
- /* default:
- TRACE1( "Type de donnes %X non support par msg_arrowed", wi_params_adr -> type ); */
- }
- MB_old_pos = wi_params_adr -> seen_y; /* Sauve ancienne position */
- wi_params_adr -> seen_y = MB_new_pos; /* valide new pos */
- set_slider_y( wi_params_adr ); /* Raff slider */
- /*
- * Fait scroller le contenu de la fentre:
- */
- vscroll_window( wi_params_adr, MB_old_pos, MB_new_pos );
- }
- break;
-
- /*
- * Dplacement horizontal
- */
- case 4:
- case 5:
- case 6:
- case 7:
- switch ( G_ev_mgpbuff[4] )
- {
- case 4: /* Page vers la gauche */
- MB_new_pos = l_max ( 0, wi_params_adr -> seen_x - wi_params_adr -> seen_w );
- break;
-
- case 5: /* Page vers la droite */
- MB_new_pos = l_min ( wi_params_adr -> total_w - wi_params_adr -> seen_w,
- wi_params_adr -> seen_x + wi_params_adr -> seen_w );
- MB_new_pos = MAX( MB_new_pos, 0 );
- break;
-
- case 6: /* Ligne vers la gauche */
- MB_new_pos = l_max ( 0, wi_params_adr -> seen_x - wi_params_adr -> h_step );
- break;
-
- case 7: /* Ligne vers la droite */
- MB_new_pos = l_min ( wi_params_adr -> total_w - wi_params_adr -> seen_w,
- wi_params_adr -> seen_x + wi_params_adr -> h_step );
- MB_new_pos = MAX( MB_new_pos, 0 );
- break;
- }
- if ( MB_new_pos != wi_params_adr -> seen_x )
- {
- switch( wi_params_adr -> type )
- {
- case TYP_DIR:
- case TYP_ARBO:
- /* case TYPTREE: */
- /* Change les coordonnes de l'arbe d'objets
l'cran: */
- (wi_params_adr -> draw_ptr.tree) -> ob_x +=
- (int) (wi_params_adr -> seen_x - MB_new_pos);
- break;
- };
- MB_old_pos = wi_params_adr -> seen_x; /* Sauve ancienne position */
- wi_params_adr -> seen_x = MB_new_pos; /* valide new pos */
- set_slider_x( wi_params_adr ); /* Raff slider */
- /* Fait scroller le contenu de la fentre: */
- hscroll_window( wi_params_adr, MB_old_pos, MB_new_pos );
- }
- break;
- }
- }
-
-
-
- /*
- * msg_vslid(-)
- *
- * Purpose:
- * --------
- * WM_VSLID : Ascenseur vertical
- *
- * History:
- * --------
- * fplanque: Created
- * 26.09.94: support type TYP_ERRORS
- */
- void msg_vslid( WIPARAMS *wi_params_adr )
- {
- /* Variables: */
- int wi_handle = wi_params_adr -> handle;
- int slider_pos= G_ev_mgpbuff[4];
-
- /* Nouvelle position demande: */
- MB_new_pos = ( slider_pos *
- (wi_params_adr -> total_h - wi_params_adr -> seen_h) / 1000);
- if ( MB_new_pos != wi_params_adr -> seen_y )
- {
- switch( wi_params_adr -> type )
- {
- case TYP_TEXT:
- case TYP_DEBUG:
- case TYP_ERRORS:
- /*
- * Fixe nouvelle ligne se trouvant en haut de l'cran:
- */
- vmove_text( wi_params_adr, MB_new_pos );
- break;
-
- case TYP_DIR:
- case TYP_ARBO:
- /*
- * Change les coordonnes de l'arbe d'objets
l'cran:
- */
- (wi_params_adr -> draw_ptr.tree) -> ob_y +=
- (int) (wi_params_adr -> seen_y - MB_new_pos);
- break;
-
- /* default:
- TRACE1( "Type de donnes %X non support par msg_vslid", wi_params_adr -> type ); */
- }
- MB_old_pos = wi_params_adr -> seen_y; /* Sauve ancienne position */
- wi_params_adr -> seen_y = MB_new_pos;
- wind_set( wi_handle, WF_VSLIDE, slider_pos);
- /*
- * Fait scroller le contenu de la fentre:
- * (ou redessine entirement si pas de scroll possible)
- * (Redraw immdiat)
- */
- vscroll_window( wi_params_adr, MB_old_pos, MB_new_pos );
- }
- }
-
-
-
- /*
- * msg_hslid(-)
- *
- * Purpose:
- * --------
- * WM_HSLID : Ascenseur horizontal
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void msg_hslid( WIPARAMS *wi_params_adr )
- {
- /*
- * Variables:
- */
- int wi_handle = wi_params_adr -> handle;
- int slider_pos= G_ev_mgpbuff[4];
-
- MB_new_pos = (int) ( slider_pos *
- (wi_params_adr -> total_w - wi_params_adr -> seen_w) / 1000);
-
- switch( wi_params_adr -> type )
- {
- case TYP_DIR:
- case TYP_ARBO:
- /* case TYPTREE: */
- /* Change les coordonnes de l'arbe d'objets
l'cran: */
- (wi_params_adr -> draw_ptr.tree) -> ob_x +=
- (int) (wi_params_adr -> seen_x - MB_new_pos);
- break;
- }
- MB_old_pos = wi_params_adr -> seen_x; /* Sauve ancienne position */
- wi_params_adr -> seen_x = MB_new_pos;
- wind_set( wi_handle, WF_HSLIDE, slider_pos);
-
- /*
- * Fait scroller le contenu de la fentre:
- * (ou redessine entirement si pas de scroll possible)
- * (Redraw immdiat):
- */
- hscroll_window( wi_params_adr, MB_old_pos, MB_new_pos );
- }
-
-
-
- /*
- * msg_sized(-)
- *
- * Purpose:
- * --------
- * WM_SIZED : Changement de taille
- *
- * History:
- * --------
- * 1993: fplanque: Created
- */
- void msg_sized( WIPARAMS *wi_params_adr )
- {
- /*
- * Variables:
- */
- int wi_handle = wi_params_adr -> handle;
-
- MB_new_x = G_ev_mgpbuff[4];
- MB_new_y = G_ev_mgpbuff[5];
- MB_new_w = G_ev_mgpbuff[6];
- MB_new_h = G_ev_mgpbuff[7];
-
- /*
- * Contrle qu'on ne dpasse pas la taille maxi autorise:
- */
- if ( MB_new_w > (wi_params_adr -> maxsize_w) )
- {
- MB_new_w = wi_params_adr -> maxsize_w;
- }
- if ( MB_new_h > (wi_params_adr -> maxsize_h) )
- {
- MB_new_h = wi_params_adr -> maxsize_h;
- }
-
- /*
- * Contrle s'il faut modifier le contenu de la fentre:
- */
- switch( wi_params_adr -> type )
- {
- case TYP_DIR:
- /*
- * Contrle s'il faut r-arranger les icnes:
- */
- if ( MB_new_w >= (wi_params_adr -> more + G_icon_w)
- || MB_new_w < (wi_params_adr -> more ) )
- {
- rearrange_dir( wi_params_adr, MB_new_w );
- /* Demande redraw total de la fentre: */
- send_fullredraw( wi_params_adr );
- }
- break;
- }
-
- /*
- * Change la taille de la fentre:
- */
- wind_set( wi_handle, WF_CURRXYWH, MB_new_x, MB_new_y, MB_new_w, MB_new_h );
- wi_params_adr -> curr_x = MB_new_x;
- wi_params_adr -> curr_y = MB_new_y;
- wi_params_adr -> curr_w = MB_new_w;
- wi_params_adr -> curr_h = MB_new_h;
-
- /*
- * Taille asc et repositionnement contenu si ncessaire:
- */
- wi_resize( wi_params_adr );
-
- wi_params_adr -> fulled = 0; /* Taille norm */
-
- /*
- * On s'occupe de positionner le formulaire pour le prochain redraw:
- */
- if ( wi_params_adr -> type == TYP_ARBO )
- { /*
- * Si positionnement ncessaire:
- */
- fixform_window(wi_params_adr ); /* Fixe nlle position formulaire */
- }
- }
-
-
-
- /*
- * msg_moved(-)
- *
- * Purpose:
- * --------
- * WM_MOVED : Dplacement d'une fentre
- *
- * History:
- * --------
- * 1993: fplanque: Created
- * 17.12.94: chge coord arbre OBJC pour les TYP_TREE (ncessaire lorsque les icnes sont actualises )
- */
- void msg_moved( WIPARAMS *wi_params_adr )
- {
- int wi_handle = wi_params_adr -> handle;
- int x_move, y_move; /* Dplacement relatif */
-
- MB_new_x = G_ev_mgpbuff[4];
- MB_new_y = G_ev_mgpbuff[5];
- MB_new_w = G_ev_mgpbuff[6];
- MB_new_h = G_ev_mgpbuff[7];
-
- x_move = MB_new_x - wi_params_adr -> curr_x;
- y_move = MB_new_y - wi_params_adr -> curr_y;
-
- switch( wi_params_adr -> type )
- {
- case TYP_DIR:
- case TYP_ARBO:
- case TYP_TREE:
- /*
- * Change les coordonnes de l'arbe d'objets
l'cran:
- */
- (wi_params_adr -> draw_ptr.tree) -> ob_x += x_move;
- (wi_params_adr -> draw_ptr.tree) -> ob_y += y_move;
- }
-
- wind_set( wi_handle, WF_CURRXYWH, MB_new_x, MB_new_y, MB_new_w, MB_new_h );
- wi_params_adr -> curr_x = MB_new_x;
- wi_params_adr -> curr_y = MB_new_y;
- wi_params_adr -> curr_w = MB_new_w;
- wi_params_adr -> curr_h = MB_new_h;
- wi_params_adr -> work_x += x_move;
- wi_params_adr -> work_y += y_move;
- wi_params_adr -> fulled = 0; /* Taille norm */
- }
-